Skip to content

Commit

Permalink
cmd/ld: correct pe section names if longer then 8 chars
Browse files Browse the repository at this point in the history
gcc 4.9.1 generates pe sections with names longer then 8 charters.

From IMAGE_SECTION_HEADER definition:

Name
An 8-byte, null-padded UTF-8 string. There is no terminating null character
if the string is exactly eight characters long. For longer names, this
member contains a forward slash (/) followed by an ASCII representation
of a decimal number that is an offset into the string table.

Our current pe object file reader does not read string table when section
names starts with /. Do that, so (issue 8811 example)

c:\go\path\src\isssue8811>go build
# isssue8811
isssue8811/glfw(.text): isssue8811/glfw(/76): not defined
isssue8811/glfw(.text): undefined: isssue8811/glfw(/76)

becomes

c:\go\path\src\isssue8811>go build
# isssue8811
isssue8811/glfw(.text): isssue8811/glfw(.rdata$.refptr._glfwInitialized): not defined
isssue8811/glfw(.text): undefined: isssue8811/glfw(.rdata$.refptr._glfwInitialized)

Small progress to

Update golang#8811

LGTM=iant, jfrederich
R=golang-codereviews, iant, jfrederich
CC=golang-codereviews
https://golang.org/cl/154210044
  • Loading branch information
alexbrainman authored and wheatman committed Jul 9, 2018
1 parent 7ecfc4b commit 678527f
Showing 1 changed file with 9 additions and 0 deletions.
9 changes: 9 additions & 0 deletions src/cmd/ld/ldpe.c
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,15 @@ ldpe(Biobuf *f, char *pkg, int64 len, char *pn)
Bseek(f, base+obj->fh.PointerToSymbolTable+sizeof(symbuf)*obj->fh.NumberOfSymbols, 0);
if(Bread(f, obj->snames, l) != l)
goto bad;
// rewrite section names if they start with /
for(i=0; i < obj->fh.NumberOfSections; i++) {
if(obj->sect[i].name == nil)
continue;
if(obj->sect[i].name[0] != '/')
continue;
l = atoi(obj->sect[i].name + 1);
obj->sect[i].name = (char*)&obj->snames[l];
}
// read symbols
obj->pesym = mal(obj->fh.NumberOfSymbols*sizeof obj->pesym[0]);
obj->npesym = obj->fh.NumberOfSymbols;
Expand Down

0 comments on commit 678527f

Please sign in to comment.