Changes in driver/as.cc [fc846ae:245a92c]
- File:
-
- 1 edited
-
driver/as.cc (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
driver/as.cc
rfc846ae r245a92c 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // as.c -- 7 // as.c -- map assembler file, scan for debug information. If found, expand file by one character and insert Cforall 8 // language code on the N line from the start of the debug information. 8 9 // 9 10 // Author : Peter A. Buhr 10 11 // Created On : Wed Aug 1 10:49:42 2018 11 12 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Aug 2 17:50:09201813 // Update Count : 9 013 // Last Modified On : Sat Sep 8 08:40:16 2018 14 // Update Count : 97 14 15 // 15 16 … … 23 24 24 25 //#define __DEBUG_H__ 26 27 #ifdef __DEBUG_H__ 28 #include <iostream> 29 using namespace std; 30 #endif // __DEBUG_H__ 25 31 26 32 int main( const int argc, const char * argv[] ) { … … 38 44 off_t size = mystat.st_size; 39 45 40 char * start = (char *)mmap( NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0 ); 41 if ( start == (void *)-1 ) { perror( "mmap" ); exit( EXIT_FAILURE ); }; 46 if ( size ) { // cannot map 0 sized file 47 char * start = (char *)mmap( NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0 ); 48 if ( start == (void *)-1 ) { perror( "mmap" ); exit( EXIT_FAILURE ); }; 42 49 43 if ( char * cursor = strstr( start, ".Ldebug_info0:" ) ) { // debug information ?44 // Expand file by one byte to hold 2 character Cforall language code.45 if ( ftruncate( fd, size + 1 ) ) { perror( "ftruncate" ); exit( EXIT_FAILURE ); };50 if ( char * cursor = strstr( start, ".Ldebug_info0:" ) ) { // debug information ? 51 // Expand file by one byte to hold 2 character Cforall language code. 52 if ( ftruncate( fd, size + 1 ) ) { perror( "ftruncate" ); exit( EXIT_FAILURE ); }; 46 53 47 for ( int i = 0; i < 8; i += 1 ) {// move N (magic) lines forward48 cursor = strstr( cursor, "\n" ) + 1;49 } // for54 for ( int i = 0; i < 8; i += 1 ) { // move N (magic) lines forward 55 cursor = strstr( cursor, "\n" ) + 1; 56 } // for 50 57 51 cursor -= 2;// backup over "c\n" language value52 if ( *(cursor - 1) != 'x' ) { fprintf( stderr, "invalid C language code\n" ); exit( EXIT_FAILURE ); };58 cursor -= 2; // backup over "c\n" language value 59 if ( *(cursor - 1) != 'x' ) { fprintf( stderr, "invalid C language code\n" ); exit( EXIT_FAILURE ); }; 53 60 54 memmove( cursor + 2, cursor + 1, start + size - cursor - 1 ); // move remaining text 1 character right61 memmove( cursor + 2, cursor + 1, start + size - cursor - 1 ); // move remaining text 1 character right 55 62 56 *(cursor) = '2'; // replace C language value with CFA 57 *(cursor + 1) = '5'; 63 *(cursor) = '2'; // replace C language value with CFA 64 *(cursor + 1) = '5'; 65 } // if 66 67 if ( munmap( start, size ) ) { perror( "munmap" ); exit( EXIT_FAILURE ); }; // update on disk 58 68 } // if 59 60 if ( munmap( start, size ) ) { perror( "munmap" ); exit( EXIT_FAILURE ); }; // update on disk61 69 62 70 argv[0] = "as";
Note:
See TracChangeset
for help on using the changeset viewer.