diff options
| author | Richard M. Stallman | 1993-08-10 01:32:23 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 1993-08-10 01:32:23 +0000 |
| commit | d7cb42c3490e1cb58a5b4ccbfda2368115a7af58 (patch) | |
| tree | 054c223f607b8e29f51d62ea3dd2d9fa81639134 | |
| parent | 194bf419bba44105754792f1ac251274a47ea3f9 (diff) | |
| download | emacs-d7cb42c3490e1cb58a5b4ccbfda2368115a7af58.tar.gz emacs-d7cb42c3490e1cb58a5b4ccbfda2368115a7af58.zip | |
(unexec): Add casts for some comparisons.
(PATCH_INDEX): Likewise.
| -rw-r--r-- | src/unexelf.c | 125 |
1 files changed, 63 insertions, 62 deletions
diff --git a/src/unexelf.c b/src/unexelf.c index b37e09da2f9..eb885dd02ec 100644 --- a/src/unexelf.c +++ b/src/unexelf.c | |||
| @@ -421,9 +421,9 @@ Filesz Memsz Flags Align | |||
| 421 | #include <sys/mman.h> | 421 | #include <sys/mman.h> |
| 422 | 422 | ||
| 423 | #ifndef emacs | 423 | #ifndef emacs |
| 424 | #define fatal(a, b, c) fprintf(stderr, a, b, c), exit(1) | 424 | #define fatal(a, b, c) fprintf (stderr, a, b, c), exit (1) |
| 425 | #else | 425 | #else |
| 426 | extern void fatal(char *, ...); | 426 | extern void fatal (char *, ...); |
| 427 | #endif | 427 | #endif |
| 428 | 428 | ||
| 429 | /* Get the address of a particular section or program header entry, | 429 | /* Get the address of a particular section or program header entry, |
| @@ -441,7 +441,7 @@ extern void fatal(char *, ...); | |||
| 441 | 441 | ||
| 442 | #define PATCH_INDEX(n) \ | 442 | #define PATCH_INDEX(n) \ |
| 443 | do { \ | 443 | do { \ |
| 444 | if ((n) >= old_bss_index) \ | 444 | if ((int) (n) >= old_bss_index) \ |
| 445 | (n)++; } while (0) | 445 | (n)++; } while (0) |
| 446 | typedef unsigned char byte; | 446 | typedef unsigned char byte; |
| 447 | 447 | ||
| @@ -503,15 +503,15 @@ unexec (new_name, old_name, data_start, bss_start, entry_address) | |||
| 503 | fatal ("Can't open %s for reading: errno %d\n", old_name, errno); | 503 | fatal ("Can't open %s for reading: errno %d\n", old_name, errno); |
| 504 | 504 | ||
| 505 | if (fstat (old_file, &stat_buf) == -1) | 505 | if (fstat (old_file, &stat_buf) == -1) |
| 506 | fatal ("Can't fstat(%s): errno %d\n", old_name, errno); | 506 | fatal ("Can't fstat (%s): errno %d\n", old_name, errno); |
| 507 | 507 | ||
| 508 | old_base = mmap (0, stat_buf.st_size, PROT_READ, MAP_SHARED, old_file, 0); | 508 | old_base = mmap (0, stat_buf.st_size, PROT_READ, MAP_SHARED, old_file, 0); |
| 509 | 509 | ||
| 510 | if (old_base == (caddr_t) -1) | 510 | if (old_base == (caddr_t) -1) |
| 511 | fatal ("Can't mmap(%s): errno %d\n", old_name, errno); | 511 | fatal ("Can't mmap (%s): errno %d\n", old_name, errno); |
| 512 | 512 | ||
| 513 | #ifdef DEBUG | 513 | #ifdef DEBUG |
| 514 | fprintf (stderr, "mmap(%s, %x) -> %x\n", old_name, stat_buf.st_size, | 514 | fprintf (stderr, "mmap (%s, %x) -> %x\n", old_name, stat_buf.st_size, |
| 515 | old_base); | 515 | old_base); |
| 516 | #endif | 516 | #endif |
| 517 | 517 | ||
| @@ -521,27 +521,28 @@ unexec (new_name, old_name, data_start, bss_start, entry_address) | |||
| 521 | old_program_h = (Elf32_Phdr *) ((byte *) old_base + old_file_h->e_phoff); | 521 | old_program_h = (Elf32_Phdr *) ((byte *) old_base + old_file_h->e_phoff); |
| 522 | old_section_h = (Elf32_Shdr *) ((byte *) old_base + old_file_h->e_shoff); | 522 | old_section_h = (Elf32_Shdr *) ((byte *) old_base + old_file_h->e_shoff); |
| 523 | old_section_names = (char *) old_base | 523 | old_section_names = (char *) old_base |
| 524 | + OLD_SECTION_H(old_file_h->e_shstrndx).sh_offset; | 524 | + OLD_SECTION_H (old_file_h->e_shstrndx).sh_offset; |
| 525 | 525 | ||
| 526 | /* Find the old .bss section. Figure out parameters of the new | 526 | /* Find the old .bss section. Figure out parameters of the new |
| 527 | * data2 and bss sections. | 527 | * data2 and bss sections. |
| 528 | */ | 528 | */ |
| 529 | 529 | ||
| 530 | for (old_bss_index = 1; old_bss_index < old_file_h->e_shnum; old_bss_index++) | 530 | for (old_bss_index = 1; old_bss_index < (int) old_file_h->e_shnum; |
| 531 | old_bss_index++) | ||
| 531 | { | 532 | { |
| 532 | #ifdef DEBUG | 533 | #ifdef DEBUG |
| 533 | fprintf (stderr, "Looking for .bss - found %s\n", | 534 | fprintf (stderr, "Looking for .bss - found %s\n", |
| 534 | old_section_names + OLD_SECTION_H(old_bss_index).sh_name); | 535 | old_section_names + OLD_SECTION_H (old_bss_index).sh_name); |
| 535 | #endif | 536 | #endif |
| 536 | if (!strcmp (old_section_names + OLD_SECTION_H(old_bss_index).sh_name, | 537 | if (!strcmp (old_section_names + OLD_SECTION_H (old_bss_index).sh_name, |
| 537 | ".bss")) | 538 | ".bss")) |
| 538 | break; | 539 | break; |
| 539 | } | 540 | } |
| 540 | if (old_bss_index == old_file_h->e_shnum) | 541 | if (old_bss_index == old_file_h->e_shnum) |
| 541 | fatal ("Can't find .bss in %s.\n", old_name, 0); | 542 | fatal ("Can't find .bss in %s.\n", old_name, 0); |
| 542 | 543 | ||
| 543 | old_bss_addr = OLD_SECTION_H(old_bss_index).sh_addr; | 544 | old_bss_addr = OLD_SECTION_H (old_bss_index).sh_addr; |
| 544 | old_bss_size = OLD_SECTION_H(old_bss_index).sh_size; | 545 | old_bss_size = OLD_SECTION_H (old_bss_index).sh_size; |
| 545 | #if defined(emacs) || !defined(DEBUG) | 546 | #if defined(emacs) || !defined(DEBUG) |
| 546 | bss_end = (unsigned int) sbrk (0); | 547 | bss_end = (unsigned int) sbrk (0); |
| 547 | new_bss_addr = (Elf32_Addr) bss_end; | 548 | new_bss_addr = (Elf32_Addr) bss_end; |
| @@ -550,7 +551,7 @@ unexec (new_name, old_name, data_start, bss_start, entry_address) | |||
| 550 | #endif | 551 | #endif |
| 551 | new_data2_addr = old_bss_addr; | 552 | new_data2_addr = old_bss_addr; |
| 552 | new_data2_size = new_bss_addr - old_bss_addr; | 553 | new_data2_size = new_bss_addr - old_bss_addr; |
| 553 | new_data2_offset = OLD_SECTION_H(old_bss_index).sh_offset; | 554 | new_data2_offset = OLD_SECTION_H (old_bss_index).sh_offset; |
| 554 | 555 | ||
| 555 | #ifdef DEBUG | 556 | #ifdef DEBUG |
| 556 | fprintf (stderr, "old_bss_index %d\n", old_bss_index); | 557 | fprintf (stderr, "old_bss_index %d\n", old_bss_index); |
| @@ -565,25 +566,25 @@ unexec (new_name, old_name, data_start, bss_start, entry_address) | |||
| 565 | if ((unsigned) new_bss_addr < (unsigned) old_bss_addr + old_bss_size) | 566 | if ((unsigned) new_bss_addr < (unsigned) old_bss_addr + old_bss_size) |
| 566 | fatal (".bss shrank when undumping???\n", 0, 0); | 567 | fatal (".bss shrank when undumping???\n", 0, 0); |
| 567 | 568 | ||
| 568 | /* Set the output file to the right size and mmap(2) it. Set | 569 | /* Set the output file to the right size and mmap it. Set |
| 569 | * pointers to various interesting objects. stat_buf still has | 570 | * pointers to various interesting objects. stat_buf still has |
| 570 | * old_file data. | 571 | * old_file data. |
| 571 | */ | 572 | */ |
| 572 | 573 | ||
| 573 | new_file = open (new_name, O_RDWR | O_CREAT, 0666); | 574 | new_file = open (new_name, O_RDWR | O_CREAT, 0666); |
| 574 | if (new_file < 0) | 575 | if (new_file < 0) |
| 575 | fatal ("Can't creat(%s): errno %d\n", new_name, errno); | 576 | fatal ("Can't creat (%s): errno %d\n", new_name, errno); |
| 576 | 577 | ||
| 577 | new_file_size = stat_buf.st_size + old_file_h->e_shentsize + new_data2_size; | 578 | new_file_size = stat_buf.st_size + old_file_h->e_shentsize + new_data2_size; |
| 578 | 579 | ||
| 579 | if (ftruncate (new_file, new_file_size)) | 580 | if (ftruncate (new_file, new_file_size)) |
| 580 | fatal ("Can't ftruncate(%s): errno %d\n", new_name, errno); | 581 | fatal ("Can't ftruncate (%s): errno %d\n", new_name, errno); |
| 581 | 582 | ||
| 582 | new_base = mmap (0, new_file_size, PROT_READ | PROT_WRITE, MAP_SHARED, | 583 | new_base = mmap (0, new_file_size, PROT_READ | PROT_WRITE, MAP_SHARED, |
| 583 | new_file, 0); | 584 | new_file, 0); |
| 584 | 585 | ||
| 585 | if (new_base == (caddr_t) -1) | 586 | if (new_base == (caddr_t) -1) |
| 586 | fatal ("Can't mmap(%s): errno %d\n", new_name, errno); | 587 | fatal ("Can't mmap (%s): errno %d\n", new_name, errno); |
| 587 | 588 | ||
| 588 | new_file_h = (Elf32_Ehdr *) new_base; | 589 | new_file_h = (Elf32_Ehdr *) new_base; |
| 589 | new_program_h = (Elf32_Phdr *) ((byte *) new_base + old_file_h->e_phoff); | 590 | new_program_h = (Elf32_Phdr *) ((byte *) new_base + old_file_h->e_phoff); |
| @@ -630,10 +631,10 @@ unexec (new_name, old_name, data_start, bss_start, entry_address) | |||
| 630 | if ((OLD_SECTION_H (old_bss_index)).sh_addralign > alignment) | 631 | if ((OLD_SECTION_H (old_bss_index)).sh_addralign > alignment) |
| 631 | alignment = OLD_SECTION_H (old_bss_index).sh_addralign; | 632 | alignment = OLD_SECTION_H (old_bss_index).sh_addralign; |
| 632 | 633 | ||
| 633 | if (NEW_PROGRAM_H(n).p_vaddr + NEW_PROGRAM_H(n).p_filesz > old_bss_addr) | 634 | if (NEW_PROGRAM_H (n).p_vaddr + NEW_PROGRAM_H (n).p_filesz > old_bss_addr) |
| 634 | fatal ("Program segment above .bss in %s\n", old_name, 0); | 635 | fatal ("Program segment above .bss in %s\n", old_name, 0); |
| 635 | 636 | ||
| 636 | if (NEW_PROGRAM_H(n).p_type == PT_LOAD | 637 | if (NEW_PROGRAM_H (n).p_type == PT_LOAD |
| 637 | && (round_up ((NEW_PROGRAM_H (n)).p_vaddr | 638 | && (round_up ((NEW_PROGRAM_H (n)).p_vaddr |
| 638 | + (NEW_PROGRAM_H (n)).p_filesz, | 639 | + (NEW_PROGRAM_H (n)).p_filesz, |
| 639 | alignment) | 640 | alignment) |
| @@ -643,18 +644,18 @@ unexec (new_name, old_name, data_start, bss_start, entry_address) | |||
| 643 | if (n < 0) | 644 | if (n < 0) |
| 644 | fatal ("Couldn't find segment next to .bss in %s\n", old_name, 0); | 645 | fatal ("Couldn't find segment next to .bss in %s\n", old_name, 0); |
| 645 | 646 | ||
| 646 | NEW_PROGRAM_H(n).p_filesz += new_data2_size; | 647 | NEW_PROGRAM_H (n).p_filesz += new_data2_size; |
| 647 | NEW_PROGRAM_H(n).p_memsz = NEW_PROGRAM_H(n).p_filesz; | 648 | NEW_PROGRAM_H (n).p_memsz = NEW_PROGRAM_H (n).p_filesz; |
| 648 | 649 | ||
| 649 | #if 0 /* Maybe allow section after data2 - does this ever happen? */ | 650 | #if 0 /* Maybe allow section after data2 - does this ever happen? */ |
| 650 | for (n = new_file_h->e_phnum - 1; n >= 0; n--) | 651 | for (n = new_file_h->e_phnum - 1; n >= 0; n--) |
| 651 | { | 652 | { |
| 652 | if (NEW_PROGRAM_H(n).p_vaddr | 653 | if (NEW_PROGRAM_H (n).p_vaddr |
| 653 | && NEW_PROGRAM_H(n).p_vaddr >= new_data2_addr) | 654 | && NEW_PROGRAM_H (n).p_vaddr >= new_data2_addr) |
| 654 | NEW_PROGRAM_H(n).p_vaddr += new_data2_size - old_bss_size; | 655 | NEW_PROGRAM_H (n).p_vaddr += new_data2_size - old_bss_size; |
| 655 | 656 | ||
| 656 | if (NEW_PROGRAM_H(n).p_offset >= new_data2_offset) | 657 | if (NEW_PROGRAM_H (n).p_offset >= new_data2_offset) |
| 657 | NEW_PROGRAM_H(n).p_offset += new_data2_size; | 658 | NEW_PROGRAM_H (n).p_offset += new_data2_size; |
| 658 | } | 659 | } |
| 659 | #endif | 660 | #endif |
| 660 | 661 | ||
| @@ -664,9 +665,9 @@ unexec (new_name, old_name, data_start, bss_start, entry_address) | |||
| 664 | * is set. data2 section header gets added by copying the existing | 665 | * is set. data2 section header gets added by copying the existing |
| 665 | * .data header and modifying the offset, address and size. | 666 | * .data header and modifying the offset, address and size. |
| 666 | */ | 667 | */ |
| 667 | for (old_data_index = 1; old_data_index < old_file_h->e_shnum; | 668 | for (old_data_index = 1; old_data_index < (int) old_file_h->e_shnum; |
| 668 | old_data_index++) | 669 | old_data_index++) |
| 669 | if (!strcmp (old_section_names + OLD_SECTION_H(old_data_index).sh_name, | 670 | if (!strcmp (old_section_names + OLD_SECTION_H (old_data_index).sh_name, |
| 670 | ".data")) | 671 | ".data")) |
| 671 | break; | 672 | break; |
| 672 | if (old_data_index == old_file_h->e_shnum) | 673 | if (old_data_index == old_file_h->e_shnum) |
| @@ -674,32 +675,32 @@ unexec (new_name, old_name, data_start, bss_start, entry_address) | |||
| 674 | 675 | ||
| 675 | /* Walk through all section headers, insert the new data2 section right | 676 | /* Walk through all section headers, insert the new data2 section right |
| 676 | before the new bss section. */ | 677 | before the new bss section. */ |
| 677 | for (n = 1, nn = 1; n < old_file_h->e_shnum; n++, nn++) | 678 | for (n = 1, nn = 1; n < (int) old_file_h->e_shnum; n++, nn++) |
| 678 | { | 679 | { |
| 679 | caddr_t src; | 680 | caddr_t src; |
| 680 | /* If it is bss section, insert the new data2 section before it. */ | 681 | /* If it is bss section, insert the new data2 section before it. */ |
| 681 | if (n == old_bss_index) | 682 | if (n == old_bss_index) |
| 682 | { | 683 | { |
| 683 | /* Steal the data section header for this data2 section. */ | 684 | /* Steal the data section header for this data2 section. */ |
| 684 | memcpy (&NEW_SECTION_H(nn), &OLD_SECTION_H(old_data_index), | 685 | memcpy (&NEW_SECTION_H (nn), &OLD_SECTION_H (old_data_index), |
| 685 | new_file_h->e_shentsize); | 686 | new_file_h->e_shentsize); |
| 686 | 687 | ||
| 687 | NEW_SECTION_H(nn).sh_addr = new_data2_addr; | 688 | NEW_SECTION_H (nn).sh_addr = new_data2_addr; |
| 688 | NEW_SECTION_H(nn).sh_offset = new_data2_offset; | 689 | NEW_SECTION_H (nn).sh_offset = new_data2_offset; |
| 689 | NEW_SECTION_H(nn).sh_size = new_data2_size; | 690 | NEW_SECTION_H (nn).sh_size = new_data2_size; |
| 690 | /* Use the bss section's alignment. This will assure that the | 691 | /* Use the bss section's alignment. This will assure that the |
| 691 | new data2 section always be placed in the same spot as the old | 692 | new data2 section always be placed in the same spot as the old |
| 692 | bss section by any other application. */ | 693 | bss section by any other application. */ |
| 693 | NEW_SECTION_H(nn).sh_addralign = OLD_SECTION_H(n).sh_addralign; | 694 | NEW_SECTION_H (nn).sh_addralign = OLD_SECTION_H (n).sh_addralign; |
| 694 | 695 | ||
| 695 | /* Now copy over what we have in the memory now. */ | 696 | /* Now copy over what we have in the memory now. */ |
| 696 | memcpy (NEW_SECTION_H(nn).sh_offset + new_base, | 697 | memcpy (NEW_SECTION_H (nn).sh_offset + new_base, |
| 697 | (caddr_t) OLD_SECTION_H(n).sh_addr, | 698 | (caddr_t) OLD_SECTION_H (n).sh_addr, |
| 698 | new_data2_size); | 699 | new_data2_size); |
| 699 | nn++; | 700 | nn++; |
| 700 | } | 701 | } |
| 701 | 702 | ||
| 702 | memcpy (&NEW_SECTION_H(nn), &OLD_SECTION_H(n), | 703 | memcpy (&NEW_SECTION_H (nn), &OLD_SECTION_H (n), |
| 703 | old_file_h->e_shentsize); | 704 | old_file_h->e_shentsize); |
| 704 | 705 | ||
| 705 | /* The new bss section's size is zero, and its file offset and virtual | 706 | /* The new bss section's size is zero, and its file offset and virtual |
| @@ -707,52 +708,52 @@ unexec (new_name, old_name, data_start, bss_start, entry_address) | |||
| 707 | if (n == old_bss_index) | 708 | if (n == old_bss_index) |
| 708 | { | 709 | { |
| 709 | /* NN should be `old_bss_index + 1' at this point. */ | 710 | /* NN should be `old_bss_index + 1' at this point. */ |
| 710 | NEW_SECTION_H(nn).sh_offset += new_data2_size; | 711 | NEW_SECTION_H (nn).sh_offset += new_data2_size; |
| 711 | NEW_SECTION_H(nn).sh_addr += new_data2_size; | 712 | NEW_SECTION_H (nn).sh_addr += new_data2_size; |
| 712 | /* Let the new bss section address alignment be the same as the | 713 | /* Let the new bss section address alignment be the same as the |
| 713 | section address alignment followed the old bss section, so | 714 | section address alignment followed the old bss section, so |
| 714 | this section will be placed in exactly the same place. */ | 715 | this section will be placed in exactly the same place. */ |
| 715 | NEW_SECTION_H(nn).sh_addralign = OLD_SECTION_H(nn).sh_addralign; | 716 | NEW_SECTION_H (nn).sh_addralign = OLD_SECTION_H (nn).sh_addralign; |
| 716 | NEW_SECTION_H(nn).sh_size = 0; | 717 | NEW_SECTION_H (nn).sh_size = 0; |
| 717 | } | 718 | } |
| 718 | /* Any section that was original placed AFTER the bss section should now | 719 | /* Any section that was original placed AFTER the bss section should now |
| 719 | be off by NEW_DATA2_SIZE. */ | 720 | be off by NEW_DATA2_SIZE. */ |
| 720 | else if (NEW_SECTION_H(nn).sh_offset >= new_data2_offset) | 721 | else if (NEW_SECTION_H (nn).sh_offset >= new_data2_offset) |
| 721 | NEW_SECTION_H(nn).sh_offset += new_data2_size; | 722 | NEW_SECTION_H (nn).sh_offset += new_data2_size; |
| 722 | 723 | ||
| 723 | /* If any section hdr refers to the section after the new .data | 724 | /* If any section hdr refers to the section after the new .data |
| 724 | section, make it refer to next one because we have inserted | 725 | section, make it refer to next one because we have inserted |
| 725 | a new section in between. */ | 726 | a new section in between. */ |
| 726 | 727 | ||
| 727 | PATCH_INDEX(NEW_SECTION_H(nn).sh_link); | 728 | PATCH_INDEX (NEW_SECTION_H (nn).sh_link); |
| 728 | PATCH_INDEX(NEW_SECTION_H(nn).sh_info); | 729 | PATCH_INDEX (NEW_SECTION_H (nn).sh_info); |
| 729 | 730 | ||
| 730 | /* Now, start to copy the content of sections. */ | 731 | /* Now, start to copy the content of sections. */ |
| 731 | if (NEW_SECTION_H(nn).sh_type == SHT_NULL | 732 | if (NEW_SECTION_H (nn).sh_type == SHT_NULL |
| 732 | || NEW_SECTION_H(nn).sh_type == SHT_NOBITS) | 733 | || NEW_SECTION_H (nn).sh_type == SHT_NOBITS) |
| 733 | continue; | 734 | continue; |
| 734 | 735 | ||
| 735 | /* Write out the sections. .data and .data1 (and data2, called | 736 | /* Write out the sections. .data and .data1 (and data2, called |
| 736 | * ".data" in the strings table) get copied from the current process | 737 | * ".data" in the strings table) get copied from the current process |
| 737 | * instead of the old file. | 738 | * instead of the old file. |
| 738 | */ | 739 | */ |
| 739 | if (!strcmp (old_section_names + NEW_SECTION_H(n).sh_name, ".data") | 740 | if (!strcmp (old_section_names + NEW_SECTION_H (n).sh_name, ".data") |
| 740 | || !strcmp ((old_section_names + NEW_SECTION_H(n).sh_name), | 741 | || !strcmp ((old_section_names + NEW_SECTION_H (n).sh_name), |
| 741 | ".data1")) | 742 | ".data1")) |
| 742 | src = (caddr_t) OLD_SECTION_H(n).sh_addr; | 743 | src = (caddr_t) OLD_SECTION_H (n).sh_addr; |
| 743 | else | 744 | else |
| 744 | src = old_base + OLD_SECTION_H(n).sh_offset; | 745 | src = old_base + OLD_SECTION_H (n).sh_offset; |
| 745 | 746 | ||
| 746 | memcpy (NEW_SECTION_H(nn).sh_offset + new_base, src, | 747 | memcpy (NEW_SECTION_H (nn).sh_offset + new_base, src, |
| 747 | NEW_SECTION_H(nn).sh_size); | 748 | NEW_SECTION_H (nn).sh_size); |
| 748 | 749 | ||
| 749 | /* If it is the symbol table, its st_shndx field needs to be patched. */ | 750 | /* If it is the symbol table, its st_shndx field needs to be patched. */ |
| 750 | if (NEW_SECTION_H(nn).sh_type == SHT_SYMTAB | 751 | if (NEW_SECTION_H (nn).sh_type == SHT_SYMTAB |
| 751 | || NEW_SECTION_H(nn).sh_type == SHT_DYNSYM) | 752 | || NEW_SECTION_H (nn).sh_type == SHT_DYNSYM) |
| 752 | { | 753 | { |
| 753 | Elf32_Shdr *spt = &NEW_SECTION_H(nn); | 754 | Elf32_Shdr *spt = &NEW_SECTION_H (nn); |
| 754 | unsigned int num = spt->sh_size / spt->sh_entsize; | 755 | unsigned int num = spt->sh_size / spt->sh_entsize; |
| 755 | Elf32_Sym * sym = (Elf32_Sym *) (NEW_SECTION_H(nn).sh_offset + | 756 | Elf32_Sym * sym = (Elf32_Sym *) (NEW_SECTION_H (nn).sh_offset + |
| 756 | new_base); | 757 | new_base); |
| 757 | for (; num--; sym++) | 758 | for (; num--; sym++) |
| 758 | { | 759 | { |
| @@ -761,7 +762,7 @@ unexec (new_name, old_name, data_start, bss_start, entry_address) | |||
| 761 | || (sym->st_shndx == SHN_COMMON)) | 762 | || (sym->st_shndx == SHN_COMMON)) |
| 762 | continue; | 763 | continue; |
| 763 | 764 | ||
| 764 | PATCH_INDEX(sym->st_shndx); | 765 | PATCH_INDEX (sym->st_shndx); |
| 765 | } | 766 | } |
| 766 | } | 767 | } |
| 767 | } | 768 | } |
| @@ -769,17 +770,17 @@ unexec (new_name, old_name, data_start, bss_start, entry_address) | |||
| 769 | /* Close the files and make the new file executable */ | 770 | /* Close the files and make the new file executable */ |
| 770 | 771 | ||
| 771 | if (close (old_file)) | 772 | if (close (old_file)) |
| 772 | fatal ("Can't close(%s): errno %d\n", old_name, errno); | 773 | fatal ("Can't close (%s): errno %d\n", old_name, errno); |
| 773 | 774 | ||
| 774 | if (close (new_file)) | 775 | if (close (new_file)) |
| 775 | fatal ("Can't close(%s): errno %d\n", new_name, errno); | 776 | fatal ("Can't close (%s): errno %d\n", new_name, errno); |
| 776 | 777 | ||
| 777 | if (stat (new_name, &stat_buf) == -1) | 778 | if (stat (new_name, &stat_buf) == -1) |
| 778 | fatal ("Can't stat(%s): errno %d\n", new_name, errno); | 779 | fatal ("Can't stat (%s): errno %d\n", new_name, errno); |
| 779 | 780 | ||
| 780 | n = umask (777); | 781 | n = umask (777); |
| 781 | umask (n); | 782 | umask (n); |
| 782 | stat_buf.st_mode |= 0111 & ~n; | 783 | stat_buf.st_mode |= 0111 & ~n; |
| 783 | if (chmod (new_name, stat_buf.st_mode) == -1) | 784 | if (chmod (new_name, stat_buf.st_mode) == -1) |
| 784 | fatal ("Can't chmod(%s): errno %d\n", new_name, errno); | 785 | fatal ("Can't chmod (%s): errno %d\n", new_name, errno); |
| 785 | } | 786 | } |