From c27139c701e8e61056ebc2cf002c5aa129779c13 Mon Sep 17 00:00:00 2001 From: Ali Saidi Date: Mon, 21 Jun 2004 00:58:30 -0400 Subject: start towards getting m5 endian compliant base/inifile.cc: Added mac os support and fixed a bug, on error we need to exit the child process not return base/intmath.hh: gcc on macos wanted a seperate function for the size_t type base/loader/elf_object.cc: I'm not sure why this works under linux because it seems to return the wrong value. base/stats/text.cc: added define/include for mac os x cpu/exec_context.hh: cpu/simple_cpu/simple_cpu.cc: added endian conversion code dev/alpha_console.cc: rather than accessing a charecter array of varying size depending on the access, lets actually do this properly. dev/alpha_console.hh: get rid of now nolonger used consoleData dev/disk_image.cc: We have to byte swap the data is some cases, added function to do that dev/ethertap.cc: added preproc directive for mac os --HG-- extra : convert_revision : 2b5685765cfa2844926d7397f363d2788e3d640a --- base/inifile.cc | 6 +++--- base/intmath.hh | 14 ++++++++++++++ base/loader/elf_object.cc | 5 +++-- base/stats/text.cc | 4 ++++ 4 files changed, 24 insertions(+), 5 deletions(-) (limited to 'base') diff --git a/base/inifile.cc b/base/inifile.cc index 74d47204e..001e0a6f8 100644 --- a/base/inifile.cc +++ b/base/inifile.cc @@ -35,7 +35,7 @@ #include #include -#if defined(__OpenBSD__) +#if defined(__OpenBSD__) || defined(__APPLE__) #include #endif #include @@ -142,11 +142,11 @@ IniFile::loadCPP(const string &file, vector &cppArgs) close(STDOUT_FILENO); if (dup2(fd[1], STDOUT_FILENO) == -1) - return 1; + exit(1); execvp("g++", args); - exit(1); + exit(0); } int retval; diff --git a/base/intmath.hh b/base/intmath.hh index 77f63fe8d..28e9d5c68 100644 --- a/base/intmath.hh +++ b/base/intmath.hh @@ -119,6 +119,20 @@ FloorLog2(int64_t x) return FloorLog2((uint64_t)x); } +inline int +FloorLog2(size_t x) +{ + assert(x > 0); + assert(sizeof(size_t) == 4 || sizeof(size_t) == 8); + + // It's my hope that this is optimized away? + if (sizeof(size_t) == 4) + return FloorLog2((uint32_t)x); + else if (sizeof(size_t) == 8) + return FloorLog2((uint64_t)x); + +} + template inline int CeilLog2(T n) diff --git a/base/loader/elf_object.cc b/base/loader/elf_object.cc index a0c0c0551..5a8f937cc 100644 --- a/base/loader/elf_object.cc +++ b/base/loader/elf_object.cc @@ -74,8 +74,9 @@ ElfObject::tryFile(const string &fname, int fd, size_t len, uint8_t *data) else { if (ehdr.e_ident[EI_CLASS] == ELFCLASS32) panic("32 bit ELF Binary, Not Supported"); - if (ehdr.e_machine != EM_ALPHA) - panic("Non Alpha Binary, Not Supported"); + printf("emachine = %x\n", ehdr.e_machine); +// if (ehdr.e_machine != EM_ALPHA) +// panic("Non Alpha Binary, Not Supported"); elf_end(elf); diff --git a/base/stats/text.cc b/base/stats/text.cc index 79a91e661..ddd428646 100644 --- a/base/stats/text.cc +++ b/base/stats/text.cc @@ -26,6 +26,10 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#if defined(__APPLE__) +#define _GLIBCPP_USE_C99 1 +#endif + #include #include #include -- cgit v1.2.3