Drei Fragen:
- Unter Windows kann man exportierten Symbolen einen Index zuweisen. Die Pascal-Sprachreferenz sagt,
Im Buch "Free Pascal 2" heißt's hingegen auf Seite 275:An index entry must be a positive number larger or equal than 1, and less than MaxInt.Michaël van Canneyt hat geschrieben:Diese Indexzahl muß eine Zahl größer oder gleich 0 sein und kleiner als MaxInt.- Was ist richtig? Könnte das bitte jemand überprüfen, ich habe gerade kein Windows zur Hand.
- Welches MaxInt ist gemeint? SmallInt von FPC oder Longint von OBJFPC?
- Man kann (unter Linux) auch einen leeren Namen angeben (myfunc name ''). Resultiert das in einem gültigen Symbol?
Eintrag 0 und Eintrag 1 bilden die selbe Funktion (abc) ab; im ersten Fall aber mit einem leeren Namen.
Code: Alles auswählen
readelf -s ./project1 Symbol table '.dynsym' contains 8 entries: Num: Value Size Type Bind Vis Ndx Name 0: 00000000 0 NOTYPE LOCAL DEFAULT UND 1: 0000e1c0 5 FUNC GLOBAL DEFAULT 7 abc 2: 00000000 0 FUNC GLOBAL DEFAULT UND dlclose@GLIBC_2.0 (2) 3: 00000000 0 FUNC GLOBAL DEFAULT UND dlsym@GLIBC_2.0 (2) 4: 00060130 4 OBJECT GLOBAL DEFAULT 11 myVar 5: 00000000 0 FUNC GLOBAL DEFAULT UND dlopen@GLIBC_2.1 (3) 6: 00000000 0 FUNC GLOBAL DEFAULT UND sqlite3_libversion 7: 00000000 0 FUNC GLOBAL DEFAULT UND dladdr@GLIBC_2.0 (2)
- Werden unter Windows Symbole, die nur einen expliziten Index haben, auch mit ihrem Namen exportiert oder sind sie nur noch über ihren Index zugänglich?
Edit: dank sei Crosscompiler; ein paar Antworten, alle anderen Fragen sind weiterhin offen.
-
- Der FPC interne Linker meint 0 wäre ungültig. Also ist 1 der niedrigste erlaubte Index.
- Es ist MaxSmallInt gemeint; der FPC interne Linker schluckt aber bis $FFFF. Das ist also definitiv ein Bug (aber wo? Dokumentation oder Linker?)