| diff -Nur a/ld/emultempl/pep.em b/ld/emultempl/pep.em |
| --- a/ld/emultempl/pep.em 2015-12-11 17:25:42.636935386 -0800 |
| +++ b/ld/emultempl/pep.em 2015-12-11 17:26:46.504481832 -0800 |
| @@ -1288,6 +1288,9 @@ |
| return TRUE; |
| } |
| |
| + const char * pdb_name = _bfd_XXi_get_codeview_pdb_name (abfd); |
| + unsigned int pdb_name_length = strlen(pdb_name); |
| + |
| if (t->build_id.sec->contents == NULL) |
| t->build_id.sec->contents = (unsigned char *) xmalloc (t->build_id.sec->size); |
| contents = t->build_id.sec->contents; |
| @@ -1306,7 +1309,7 @@ |
| idd.MajorVersion = 0; |
| idd.MinorVersion = 0; |
| idd.Type = PE_IMAGE_DEBUG_TYPE_CODEVIEW; |
| - idd.SizeOfData = sizeof (CV_INFO_PDB70) + 1; |
| + idd.SizeOfData = sizeof (CV_INFO_PDB70) + pdb_name_length + 1; |
| idd.AddressOfRawData = asec->vma - ib + link_order->offset |
| + sizeof (struct external_IMAGE_DEBUG_DIRECTORY); |
| idd.PointerToRawData = asec->filepos + link_order->offset |
| @@ -1370,12 +1373,12 @@ |
| t->build_id.style = emit_build_id; |
| t->build_id.sec = s; |
| |
| - /* Section is a fixed size: |
| + /* Section is a variable size: |
| One IMAGE_DEBUG_DIRECTORY entry, of type IMAGE_DEBUG_TYPE_CODEVIEW, |
| pointing at a CV_INFO_PDB70 record containing the build-id, with a |
| - null byte for PdbFileName. */ |
| + null terminated string for PdbFileName. */ |
| s->size = sizeof (struct external_IMAGE_DEBUG_DIRECTORY) |
| - + sizeof (CV_INFO_PDB70) + 1; |
| + + sizeof (CV_INFO_PDB70) + strlen(_bfd_XXi_get_codeview_pdb_name(link_info.output_bfd)) + 1; |
| |
| return TRUE; |
| } |