qiuzijian / google-breakpad

Automatically exported from code.google.com/p/google-breakpad
0 stars 0 forks source link

New Mac & Linux dumpers don’t write PUBLIC #397

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
The old Mac dumper (and I think the Linux one too) would always write a PUBLIC 
line for every defined external symbol that it found in the symbol table.

The new one does not do this.

This is necessary because, at least on the Mac, it’s how we get symbols from 
system libraries. I think that things worked the same way on Linux.

For system libraries, no debugging data is available at all. All we have is the 
names in the symbol table. The processor knows that if it can’t resolve 
something based on its being a member of a FUNC, it can fall back to looking 
for the highest PUBLIC in the module beneath the address that’s being looked 
for. This is always better than nothing, and is usually even correct. In 
instances when it’s incorrect, it’s incorrect for obvious reasons (such as 
a preposterous offset from the PUBLIC).

Note that the name PUBLIC isn’t quite right for private extern symbols, but 
the symbol dumper ought to write PUBLIC lines for these too.

This is pretty critical.

Original issue reported on code.google.com by mark@chromium.org on 20 Aug 2010 at 7:29

GoogleCodeExporter commented 9 years ago
Rough first cut that does the trick (but only tested on Mac) at 
http://breakpad.appspot.com/163001.

Original comment by mark@chromium.org on 20 Aug 2010 at 9:29

GoogleCodeExporter commented 9 years ago
This was fixed in r778 (Mac) and r793 (Linux).

Original comment by ted.mielczarek on 31 Aug 2011 at 4:42