Unverified Commit 57ef73b2 by Claire Xen Committed by GitHub

Merge pull request #10 from YosysHQ/yosys-experimental

Integrate write_cex and cexinfo and some fixes in write_cex output code
parents 9b245d9f 264dfc7e
...@@ -206,7 +206,10 @@ depend: $(DEP) ...@@ -206,7 +206,10 @@ depend: $(DEP)
clean: clean:
@echo "$(MSG_PREFIX)\`\` Cleaning up..." @echo "$(MSG_PREFIX)\`\` Cleaning up..."
$(VERBOSE)rm -rvf $(PROG) lib$(PROG).a $(OBJ) $(GARBAGE) $(OBJ:.o=.d) $(VERBOSE)rm -rvf $(PROG) lib$(PROG).a
$(VERBOSE)rm -rvf $(OBJ)
$(VERBOSE)rm -rvf $(GARBAGE)
$(VERBOSE)rm -rvf $(OBJ:.o=.d)
tags: tags:
etags `find . -type f -regex '.*\.\(c\|h\)'` etags `find . -type f -regex '.*\.\(c\|h\)'`
......
...@@ -363,7 +363,11 @@ void Abc_ShowFile( char * FileNameDot ) ...@@ -363,7 +363,11 @@ void Abc_ShowFile( char * FileNameDot )
// generate the PostScript file using DOT // generate the PostScript file using DOT
sprintf( CommandDot, "%s -Tps -o %s %s", pDotName, FileNamePs, FileNameDot ); sprintf( CommandDot, "%s -Tps -o %s %s", pDotName, FileNamePs, FileNameDot );
#if defined(__wasm)
RetValue = -1;
#else
RetValue = system( CommandDot ); RetValue = system( CommandDot );
#endif
if ( RetValue == -1 ) if ( RetValue == -1 )
{ {
fprintf( stdout, "Command \"%s\" did not succeed.\n", CommandDot ); fprintf( stdout, "Command \"%s\" did not succeed.\n", CommandDot );
...@@ -401,7 +405,11 @@ void Abc_ShowFile( char * FileNameDot ) ...@@ -401,7 +405,11 @@ void Abc_ShowFile( char * FileNameDot )
char CommandPs[1000]; char CommandPs[1000];
unlink( FileNameDot ); unlink( FileNameDot );
sprintf( CommandPs, "%s %s &", pGsNameUnix, FileNamePs ); sprintf( CommandPs, "%s %s &", pGsNameUnix, FileNamePs );
#if defined(__wasm)
if ( 1 )
#else
if ( system( CommandPs ) == -1 ) if ( system( CommandPs ) == -1 )
#endif
{ {
fprintf( stdout, "Cannot execute \"%s\".\n", CommandPs ); fprintf( stdout, "Cannot execute \"%s\".\n", CommandPs );
return; return;
......
...@@ -2175,7 +2175,11 @@ void Gia_ManGnuplotShow( char * pPlotFileName ) ...@@ -2175,7 +2175,11 @@ void Gia_ManGnuplotShow( char * pPlotFileName )
{ {
char Command[1000]; char Command[1000];
sprintf( Command, "%s %s ", pProgNameGnuplot, pPlotFileName ); sprintf( Command, "%s %s ", pProgNameGnuplot, pPlotFileName );
#if defined(__wasm)
if ( 1 )
#else
if ( system( Command ) == -1 ) if ( system( Command ) == -1 )
#endif
{ {
fprintf( stdout, "Cannot execute \"%s\".\n", Command ); fprintf( stdout, "Cannot execute \"%s\".\n", Command );
return; return;
......
...@@ -52,6 +52,9 @@ int cmdCheckShellEscape( Abc_Frame_t * pAbc, int argc, char ** argv) ...@@ -52,6 +52,9 @@ int cmdCheckShellEscape( Abc_Frame_t * pAbc, int argc, char ** argv)
int RetValue; int RetValue;
if (argv[0][0] == '!') if (argv[0][0] == '!')
{ {
#if defined(__wasm)
RetValue = -1;
#else
const int size = 4096; const int size = 4096;
int i; int i;
char * buffer = ABC_ALLOC(char, 10000); char * buffer = ABC_ALLOC(char, 10000);
...@@ -70,7 +73,7 @@ int cmdCheckShellEscape( Abc_Frame_t * pAbc, int argc, char ** argv) ...@@ -70,7 +73,7 @@ int cmdCheckShellEscape( Abc_Frame_t * pAbc, int argc, char ** argv)
// the parts, we lose information. So a command like // the parts, we lose information. So a command like
// `!ls "file name"` will be sent to the system as // `!ls "file name"` will be sent to the system as
// `ls file name` which is a BUG // `ls file name` which is a BUG
#endif
return 1; return 1;
} }
else else
......
...@@ -49,7 +49,9 @@ SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. ...@@ -49,7 +49,9 @@ SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
#include <sys/times.h> #include <sys/times.h>
#include <sys/resource.h> #include <sys/resource.h>
#include <unistd.h> #include <unistd.h>
#if !defined(__wasm)
#include <signal.h> #include <signal.h>
#endif
#include <stdlib.h> #include <stdlib.h>
#endif #endif
...@@ -132,7 +134,7 @@ int Abc_RealMain( int argc, char * argv[] ) ...@@ -132,7 +134,7 @@ int Abc_RealMain( int argc, char * argv[] )
break; break;
case 'm': { case 'm': {
#if !defined(WIN32) && !defined(ABC_NO_RLIMIT) #if !defined(WIN32) && !defined(__wasm)
int maxMb = atoi(globalUtilOptarg); int maxMb = atoi(globalUtilOptarg);
printf("Limiting memory use to %d MB\n", maxMb); printf("Limiting memory use to %d MB\n", maxMb);
struct rlimit limit = { struct rlimit limit = {
...@@ -144,7 +146,7 @@ int Abc_RealMain( int argc, char * argv[] ) ...@@ -144,7 +146,7 @@ int Abc_RealMain( int argc, char * argv[] )
break; break;
} }
case 'l': { case 'l': {
#if !defined(WIN32) && !defined(ABC_NO_RLIMIT) #if !defined(WIN32) && !defined(__wasm)
rlim_t maxTime = atoi(globalUtilOptarg); rlim_t maxTime = atoi(globalUtilOptarg);
printf("Limiting time to %d seconds\n", (int)maxTime); printf("Limiting time to %d seconds\n", (int)maxTime);
struct rlimit limit = { struct rlimit limit = {
......
...@@ -25,6 +25,23 @@ ...@@ -25,6 +25,23 @@
#include <fcntl.h> #include <fcntl.h>
#include <sys/stat.h> #include <sys/stat.h>
// Handle legacy macros
#if !defined(S_IREAD)
#if defined(S_IRUSR)
#define S_IREAD S_IRUSR
#else
#error S_IREAD is undefined
#endif
#endif
#if !defined(S_IWRITE)
#if defined(S_IWUSR)
#define S_IWRITE S_IWUSR
#else
#error S_IWRITE is undefined
#endif
#endif
#if defined(_MSC_VER) || defined(__MINGW32__) #if defined(_MSC_VER) || defined(__MINGW32__)
#include <windows.h> #include <windows.h>
#include <process.h> #include <process.h>
...@@ -102,6 +119,17 @@ int tmpFile(const char* prefix, const char* suffix, char** out_name) ...@@ -102,6 +119,17 @@ int tmpFile(const char* prefix, const char* suffix, char** out_name)
} }
assert(0); // -- could not open temporary file assert(0); // -- could not open temporary file
return 0; return 0;
#elif defined(__wasm)
static int seq = 0; // no risk of collision since we're in a sandbox
int fd;
*out_name = (char*)malloc(strlen(prefix) + strlen(suffix) + 9);
sprintf(*out_name, "%s%08d%s", prefix, seq++, suffix);
fd = open(*out_name, O_CREAT | O_EXCL | O_RDWR, S_IREAD | S_IWRITE);
if (fd == -1){
free(*out_name);
*out_name = NULL;
}
return fd;
#else #else
int fd; int fd;
*out_name = (char*)malloc(strlen(prefix) + strlen(suffix) + 7); *out_name = (char*)malloc(strlen(prefix) + strlen(suffix) + 7);
......
...@@ -43,7 +43,11 @@ ABC_NAMESPACE_IMPL_START ...@@ -43,7 +43,11 @@ ABC_NAMESPACE_IMPL_START
int Util_SignalSystem(const char* cmd) int Util_SignalSystem(const char* cmd)
{ {
#if defined(__wasm)
return -1;
#else
return system(cmd); return system(cmd);
#endif
} }
int tmpFile(const char* prefix, const char* suffix, char** out_name); int tmpFile(const char* prefix, const char* suffix, char** out_name);
......
...@@ -97,7 +97,11 @@ void RegionAllocator<T>::capacity(uint32_t min_cap) ...@@ -97,7 +97,11 @@ void RegionAllocator<T>::capacity(uint32_t min_cap)
cap += delta; cap += delta;
if (cap <= prev_cap) if (cap <= prev_cap)
#ifdef __wasm
abort();
#else
throw OutOfMemoryException(); throw OutOfMemoryException();
#endif
} }
// printf(" .. (%p) cap = %u\n", this, cap); // printf(" .. (%p) cap = %u\n", this, cap);
...@@ -119,7 +123,11 @@ RegionAllocator<T>::alloc(int size) ...@@ -119,7 +123,11 @@ RegionAllocator<T>::alloc(int size)
// Handle overflow: // Handle overflow:
if (sz < prev_sz) if (sz < prev_sz)
#ifdef __wasm
abort();
#else
throw OutOfMemoryException(); throw OutOfMemoryException();
#endif
return prev_sz; return prev_sz;
} }
......
...@@ -97,7 +97,11 @@ void vec<T>::capacity(int min_cap) { ...@@ -97,7 +97,11 @@ void vec<T>::capacity(int min_cap) {
if (cap >= min_cap) return; if (cap >= min_cap) return;
int add = imax((min_cap - cap + 1) & ~1, ((cap >> 1) + 2) & ~1); // NOTE: grow by approximately 3/2 int add = imax((min_cap - cap + 1) & ~1, ((cap >> 1) + 2) & ~1); // NOTE: grow by approximately 3/2
if (add > INT_MAX - cap || (((data = (T*)::realloc(data, (cap += add) * sizeof(T))) == NULL) && errno == ENOMEM)) if (add > INT_MAX - cap || (((data = (T*)::realloc(data, (cap += add) * sizeof(T))) == NULL) && errno == ENOMEM))
#ifdef __wasm
abort();
#else
throw OutOfMemoryException(); throw OutOfMemoryException();
#endif
} }
......
...@@ -34,7 +34,11 @@ static inline void* xrealloc(void *ptr, size_t size) ...@@ -34,7 +34,11 @@ static inline void* xrealloc(void *ptr, size_t size)
{ {
void* mem = realloc(ptr, size); void* mem = realloc(ptr, size);
if (mem == NULL && errno == ENOMEM){ if (mem == NULL && errno == ENOMEM){
#ifdef __wasm
abort();
#else
throw OutOfMemoryException(); throw OutOfMemoryException();
#endif
}else }else
return mem; return mem;
} }
......
...@@ -100,7 +100,11 @@ void RegionAllocator<T>::capacity(uint32_t min_cap) ...@@ -100,7 +100,11 @@ void RegionAllocator<T>::capacity(uint32_t min_cap)
cap += delta; cap += delta;
if (cap <= prev_cap) if (cap <= prev_cap)
#ifdef __wasm
abort();
#else
throw OutOfMemoryException(); throw OutOfMemoryException();
#endif
} }
//printf(" .. (%p) cap = %u\n", this, cap); //printf(" .. (%p) cap = %u\n", this, cap);
...@@ -122,7 +126,11 @@ RegionAllocator<T>::alloc(int size) ...@@ -122,7 +126,11 @@ RegionAllocator<T>::alloc(int size)
// Handle overflow: // Handle overflow:
if (sz < prev_sz) if (sz < prev_sz)
#ifdef __wasm
abort();
#else
throw OutOfMemoryException(); throw OutOfMemoryException();
#endif
return prev_sz; return prev_sz;
} }
......
...@@ -28,20 +28,18 @@ OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWA ...@@ -28,20 +28,18 @@ OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWA
# include <sys/int_fmtio.h> # include <sys/int_fmtio.h>
# include <sys/int_limits.h> # include <sys/int_limits.h>
#else #elif _WIN32
#define __STDC_LIMIT_MACROS
# include "pstdint.h" # include "pstdint.h"
//# include <inttypes.h>
#endif #else
#include <limits.h> # define __STDC_LIMIT_MACROS
# include <limits.h>
# include <inttypes.h>
#ifndef PRIu64
#define PRIu64 "lu"
#define PRIi64 "ld"
#endif #endif
//================================================================================================= //=================================================================================================
#include <misc/util/abc_namespaces.h> #include <misc/util/abc_namespaces.h>
......
...@@ -100,7 +100,11 @@ void vec<T>::capacity(int min_cap) { ...@@ -100,7 +100,11 @@ void vec<T>::capacity(int min_cap) {
if (cap >= min_cap) return; if (cap >= min_cap) return;
int add = imax((min_cap - cap + 1) & ~1, ((cap >> 1) + 2) & ~1); // NOTE: grow by approximately 3/2 int add = imax((min_cap - cap + 1) & ~1, ((cap >> 1) + 2) & ~1); // NOTE: grow by approximately 3/2
if (add > INT_MAX - cap || (((data = (T*)::realloc(data, (cap += add) * sizeof(T))) == NULL) && errno == ENOMEM)) if (add > INT_MAX - cap || (((data = (T*)::realloc(data, (cap += add) * sizeof(T))) == NULL) && errno == ENOMEM))
#ifdef __wasm
abort();
#else
throw OutOfMemoryException(); throw OutOfMemoryException();
#endif
} }
......
...@@ -39,7 +39,11 @@ static inline void* xrealloc(void *ptr, size_t size) ...@@ -39,7 +39,11 @@ static inline void* xrealloc(void *ptr, size_t size)
{ {
void* mem = realloc(ptr, size); void* mem = realloc(ptr, size);
if (mem == NULL && errno == ENOMEM){ if (mem == NULL && errno == ENOMEM){
#ifdef __wasm
abort();
#else
throw OutOfMemoryException(); throw OutOfMemoryException();
#endif
}else { }else {
return mem; return mem;
} }
......
...@@ -100,7 +100,11 @@ void RegionAllocator<T>::capacity(uint32_t min_cap) ...@@ -100,7 +100,11 @@ void RegionAllocator<T>::capacity(uint32_t min_cap)
cap += delta; cap += delta;
if (cap <= prev_cap) if (cap <= prev_cap)
#ifdef __wasm
abort();
#else
throw OutOfMemoryException(); throw OutOfMemoryException();
#endif
} }
//printf(" .. (%p) cap = %u\n", this, cap); //printf(" .. (%p) cap = %u\n", this, cap);
...@@ -122,7 +126,11 @@ RegionAllocator<T>::alloc(int size) ...@@ -122,7 +126,11 @@ RegionAllocator<T>::alloc(int size)
// Handle overflow: // Handle overflow:
if (sz < prev_sz) if (sz < prev_sz)
#ifdef __wasm
abort();
#else
throw OutOfMemoryException(); throw OutOfMemoryException();
#endif
return prev_sz; return prev_sz;
} }
......
...@@ -28,20 +28,18 @@ OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWA ...@@ -28,20 +28,18 @@ OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWA
# include <sys/int_fmtio.h> # include <sys/int_fmtio.h>
# include <sys/int_limits.h> # include <sys/int_limits.h>
#else #elif _WIN32
#define __STDC_LIMIT_MACROS
# include "pstdint.h" # include "pstdint.h"
//# include <inttypes.h>
#endif #else
#include <limits.h> # define __STDC_LIMIT_MACROS
# include <limits.h>
# include <inttypes.h>
#ifndef PRIu64
#define PRIu64 "lu"
#define PRIi64 "ld"
#endif #endif
//================================================================================================= //=================================================================================================
#include <misc/util/abc_namespaces.h> #include <misc/util/abc_namespaces.h>
......
...@@ -102,14 +102,22 @@ void vec<T>::capacity(int min_cap) { ...@@ -102,14 +102,22 @@ void vec<T>::capacity(int min_cap) {
if (cap >= min_cap) return; if (cap >= min_cap) return;
int add = imax((min_cap - cap + 1) & ~1, ((cap >> 1) + 2) & ~1); // NOTE: grow by approximately 3/2 int add = imax((min_cap - cap + 1) & ~1, ((cap >> 1) + 2) & ~1); // NOTE: grow by approximately 3/2
if (add > INT_MAX - cap || (((data = (T*)::realloc(data, (cap += add) * sizeof(T))) == NULL) && errno == ENOMEM)) if (add > INT_MAX - cap || (((data = (T*)::realloc(data, (cap += add) * sizeof(T))) == NULL) && errno == ENOMEM))
#ifdef __wasm
abort();
#else
throw OutOfMemoryException(); throw OutOfMemoryException();
#endif
} }
template<class T> template<class T>
void vec<T>::prelocate(int ext_cap) { void vec<T>::prelocate(int ext_cap) {
if (cap >= ext_cap) return; if (cap >= ext_cap) return;
if (ext_cap > INT_MAX || (((data = (T*)::realloc(data, ext_cap * sizeof(T))) == NULL) && errno == ENOMEM)) if (ext_cap > INT_MAX || (((data = (T*)::realloc(data, ext_cap * sizeof(T))) == NULL) && errno == ENOMEM))
#ifdef __wasm
abort();
#else
throw OutOfMemoryException(); throw OutOfMemoryException();
#endif
cap = ext_cap; cap = ext_cap;
} }
......
...@@ -39,7 +39,11 @@ static inline void* xrealloc(void *ptr, size_t size) ...@@ -39,7 +39,11 @@ static inline void* xrealloc(void *ptr, size_t size)
{ {
void* mem = realloc(ptr, size); void* mem = realloc(ptr, size);
if (mem == NULL && errno == ENOMEM){ if (mem == NULL && errno == ENOMEM){
#ifdef __wasm
abort();
#else
throw OutOfMemoryException(); throw OutOfMemoryException();
#endif
}else { }else {
return mem; return mem;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment